#!/bin/bash
#多功能混合脚本

#模块菜单展示函数，输入可选择模块信息
module_menu() {
module_array=("初始化模块" "虚拟机状态模块" "用户管理模块" "安装包管理模块" "系统管理模块" "软件调用模块" "其他功能模块" "退出") 
for ((i=0; i<${#module_array[@]}; i++)) ;
  do
    echo -e "\e[32m\t选项$(($i+1))--${module_array[$i]}\e[0m"
  done
}
#延迟函数，随机延迟0.1-1秒，便于执行结果的查看
date() {
number=$((RANDOM % 10 + 1 ))
sleep_time=0.$number
sleep $sleep_time
echo ""
}
#模块帮助信息，针对模块选择时的错误输出
module_message() {
echo -e "\e[33m\t请输入选项1-${#module_array[@]}\e[0m"
}

#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>初始化模块<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#初始化功能菜单函数，输出初始化模块的各个功能
start_menu() {
start_array=("永久关闭防火墙" "永久关闭Selinux" "更换阿里云仓库" "安装常用软件" "退出此模块")
for ((i=0; i<${#start_array[@]}; i++)); 
do
  echo -e "\e[32m\t选项$(($i+1))--${start_array[$i]}\e[0m"
done
}
#防火墙关闭函数，用于永久关闭防火墙
shutdown_firewall() {
systemctl disable --now firewalld &> /dev/null
if [ $? -eq 0 ];then
  echo -e "\e[32m\t防火墙已关闭且配置为永久关闭\e[0m"
else 
  echo -e "\e[31m\t防火墙关闭失败\e[0m"
fi
}
#Selinux关闭函数，用于永久关闭Selinux
shutdown_selinux() {
sed -i 's/enforing/disabled/g' /etc/selinux/config 
if [ $? -eq 0 ];then
  echo -e "\e[32m\tSelinux已关闭且配置为永久关闭,生效需要进行重启\e[0m"
else 
  echo -e "\e[31m\tSelinux配置失败\e[0m"
fi
}
#更换阿里云源仓库函数
change_yum_repositoy_aliyun() {
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null
if [ $? -eq 0 ];then
  echo -e "\e[32m\t阿里云yum仓库更换完毕\e[0m"
else 
  echo -e "\e[31m\t阿里云yum仓库更换失败\e[0m"
fi
}
#安装常用软件函数，用于安装vim和wget软件包
install_normal_packages() {
yum -y install wget vim &> /dev/null
if [ $? -eq 0 ];then
  echo -e "\e[32m\t常用软件安装完毕\e[0m"
else 
  echo -e "\e[31m\t安装失败，查看当前yum源是否可用\e[0m"
fi
}
#错误提示函数，用于在选择功能不正确时进行提示
start_message() {
echo -e "\e[33m\t请输入选项1-${#start_array[@]}\e[0m"
}

#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>虚拟机状态模块<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#状态模块菜单函数，用于展示状态模块的功能
status_menu() {
status_array=("查看磁盘可用空间" "查看内存可用空间" "查看平均负载量" "查看当前主机名" "查看当前所使用的ip" "查看当前用户名" "退出")
for ((i=0; i<${#status_array[@]}; i++)) 
do 
  echo -e "\e[32m\t选项$(($i+1))--${status_array[$i]}\e[0m"
done
}
#剩余磁盘空间函数，输出当前磁盘空间剩余量
show_fdisk_free() {
fdisk_free=`df -hT  | grep -w "/"| awk '{print $5}'`
fdisk_used_percentage=`df -hT  | grep -w "/"| awk '{print $6}'`
echo -e "\e[32m\t磁盘剩余可用空间为:${fdisk_free:-0},已使用百分比为:${fdisk_used_percentage:-100%}\e[0m"
}
#剩余内存函数，输出当前内存剩余空间量
show_mem_free() {
mem_used=`free -h | grep "Mem" | awk '{print $3}'`
mem_free=`free -h | grep "Mem" | awk '{print $4}'`
echo -e "\e[32m\t内存剩余可用空间为:${mem_free:-0},已使用空间为:${mem_used:-10G}\e[0m"
}
#平均负载函数，输出当前主机在1min，5min，15min内的平均负载量
show_avg_load() {
avg_load=`uptime | awk -F":" '{print $4}'`
avg_number=1
for i in $avg_load
do  
  case $avg_number in 
  1)
    avg_time="一";;
  2)
    avg_time="五";;
  3)  
    avg_time="十五";;
  esac
  avg_number=$(($avg_number+1))
  echo -e "\e[32m\t$avg_time分钟平均负载为:$i\e[0m"
done
}
#主机名展示函数，用于展示当前主机的主机名
show_hostname() {
hostname=$HOSTNAME
echo -e "\e[32m\t当前主机名为:$hostname\e[0m"
}
#ip地址展示函数，用于展示当前主机所使用的ip地址
show_ipaddr() {
number=1
ip_addr=`ip a | grep -w "inet" | awk '{print $2}'`
for i in $ip_addr
do 
   echo -e "\e[32m\t本机${j}号ip为:$i\e[0m"
   number=$(($number+1))
done
}
#用户展示函数，用于展示当前主机所使用用户
show_user() {
now_user=$USER
echo -e "\e[32m\t当前使用的用户为:$now_user\e[0m"
}
#错误信息函数，用于输入选项非法使返回提示信息
status_message() {
echo -e "\e[33m\t请输入选项1-${#status_array[@]}\e[0m"
}

#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>用户管理模块<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#用户管理菜单函数，用于展示用户管理模块可用功能
#搜集用户所有信息，存储到一个列表中，用于后续的使用
user_list=()
user_list_number=0
while read user_content
do
  user_list[$user_list_number]=$user_content
  user_list_number=$(($user_list_number+1))
done < /etc/passwd
user_menu() {
user_array=("查看所有用户数量" "查看系统用户数量" "查看普通用户数量" "创建用户" "删除用户" "查看用户详细信息" "退出")
for ((i=0; i<${#user_array[@]}; i++)) 
do
  echo -e "\e[32m\t选项$(($i+1))--${user_array[$i]}\e[0m"
done
}
show_all_user_number() {
all_user_number=${#user_list[@]}
echo -e "\e[32m\t系统所有用户的数量为:$all_user_number\e[0m"
}
show_os_user_number() {
os_user_number=0
for ((i=0; i<${#user_list[@]}; i++))
do 
  flag_number=`echo ${user_list[$i]} | awk -F":" '{print $3}'`
  if [ $flag_number -lt 1000 ];then
  os_user_number=$(($os_user_number+1))
  fi
done
echo -e "\e[32m\t系统用户的数量为:$os_user_number\e[0m"
}
show_normal_user_number() {
normal_user_number=0
for ((i=0; i<${#user_list[@]}; i++))
do 
  flag_number=`echo ${user_list[$i]} | awk -F":" '{print $3}'`
  if [ $flag_number -ge 1000 ];then
  normal_user_number=$(($normal_user_number+1))
  fi
done
echo -e "\e[32m\t普通用户的数量为:$normal_user_number\e[0m"
}
create_user() {
echo "create"
}
delete_user() {
echo "delete"
}
show_user_message() {
read -p "输入你要查看的用户名" user_name

}
user_message() {
echo -e "\e[33m\t请输入选项1-${#user_array[@]}\e[0m"
}
#主函数，脚本的入口
main() {
echo -e "\e[33m\t欢迎使用云计算多功能脚本\e[0m"
while true; 
do
  module_menu
  read -p "输入你要使用的模块(默认为退出):" module_choice
  module_choice=${module_choice:-$((${#module_array[@]}))}
  case $module_choice in 
    1) 
      echo -e "\e\t[33m欢迎使用初始化模块\e[0m"
      while true;
      do
        start_menu
        read -p "输入你要使用的功能(默认为退出):" start_choice
        start_choice=${start_choice:-${#start_array[@]}}
        case $start_choice in 
          1) 
            shutdown_firewall
            date;;
          2) 
            shutdown_selinux
            date;;
          3) 
            change_yum_repositoy_aliyun
            date;;
          4) 
            install_normal_packages
            date;;
          5) 
            echo -e "\e\t[33m退出初始化模块\e[0m"
            break;;
          *) 
            start_message;;
        esac 
      done
      date;;
    2) 
      echo -e "\e\t[33m欢迎使用虚拟机状态查看模块\e[0m"
      while true;
      status_menu
      do
        read -p "请选择你要使用的功能(默认退出):" status_choice
        status_choice=${status_choice:-${#status_array[@]}}
        case $status_choice in 
          1) 
            show_fdisk_free
            date;;
          2) 
            show_mem_free
            date;;
          3) 
            show_avg_load
            date;;
          4) 
            show_hostname
            date;;
          5) 
            show_ipaddr
            date;;
          6) 
            show_user
            date;;
          7) 
            echo -e "\e\t[33m退出虚拟机状态查看模块\e[0m"
            break;;
          *) 
            status_message
            date;;      
        esac
      done
      date;;
    3) 
      echo -e "\e\t[33m欢迎使用用户管理模块\e[0m"
      while true; 
      do
        user_menu
        read -p "输入你要使用的功能(默认为退出):" user_choice
        user_choice=${user_choice:-${#user_array[@]}}
        case $user_choice in 
          1) 
            show_all_user_number
            date;;
          2) 
            show_os_user_number
            date;;
          3) 
            show_normal_user_number
            date;;
          4) 
            create_user
            date;;
          5) 
            delete_user
            date;;
          6) 
            show_user_message
            date;;
          7) 
            echo -e "\e\t[33m退出用户管理模块\e[0m"
            break;;
          *) 
            user_message
            date;;
        esac
      done
      date;;
    4) 
      echo -e "\e\t[33m欢迎使用安装包管理模块\e[0m"
      date;;
    5) 
      echo -e "\e\t[33m欢迎使用系统管理模块\e[0m"
      date;;
    6) 
      echo -e "\e\t[33m欢迎使用软件调用模块\e[0m"
      date;;
    7) 
      echo -e "\e\t[33m欢迎使用其他功能模块\e[0m"
      date;;
    8) 
      echo -e "\e\t[33m成功退出此脚本\e[0m"
      break;; 
    *) 
      module_message;;
  esac
done
}
main
